package com.yunsom.testdemo.design.vistor;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Xbao
 * @version 1.0
 * @description
 * 工程师是代码数量，经理是产品数量，他们的职责不一样，也就是因为差异性，
 * 才使得访问模式能够发挥它的作用。Staff、Engineer、Manager 3个类型就是对象结构，
 * 这些类型相对稳定，不会发生变化。 * 然后将这些员工添加到一个业务报表类中，
 * 公司高层可以通过该报表类的 showReport 方法查看所有员工的业绩
 * @date 2021/3/19 16:27
 */
public class BusinessReport {

  private List<AbstractStaff> allAbstractStaff = new ArrayList<>();

  public BusinessReport(){

    allAbstractStaff.add(new Manager("王经理"));
    allAbstractStaff.add(new Manager("张经理"));
    allAbstractStaff.add(new Manager("李经理"));
    allAbstractStaff.add(new Engineer("陈工"));
    allAbstractStaff.add(new Engineer("张工"));
    allAbstractStaff.add(new Engineer("元工"));

  }

  public void showReport(Visitor visitor){
    allAbstractStaff.stream().forEach(abstractStaff -> abstractStaff.accept(visitor));
  }

}
